package main

import (
	"fmt"
	"unsafe"
)

func main() {
	//通道缓冲区三个
	//同步模式必须有配对操作的goroutline出现，否则会一直阻塞
	//异步模式在缓冲区未满或者数据未读完之前不会阻塞
	//多数时候，异步通道有助于提升性能，减少排队阻塞
	c := make(chan int,3)
	c <-1
	c <-2
	println(<-c)
	println(<-c)

	//缓冲区大小仅仅是内部属性，不属于类型组成部分。另外通道变量本身就是指针，可用相等操作符判断是否为同一对象或nil
	//虽然可传递指针来避免数据复制，但需要额外注意数据安全
	var a,b = make(chan int ,3),make(chan int)
	var d chan bool
	println(a ==b)
	println(d ==nil)
	fmt.Printf("%p,%d \n",a,unsafe.Sizeof(a))

	a <- 1
	a <- 2
	//内置函数cap和len返回缓冲区大小和当前已缓冲区大小和当前已缓冲数量，
	//而对于同步通道都返回0，据此可以判断通道是异步还是同步
	println("a:",len(a),cap(a))
	println("b:",len(b),cap(b))
}
